Amazon AppStream 2.0がIAMロールに対応しました
Amazon AppStream 2.0が
- Image Builder(イメージの作成に使用する仮想マシン)
- フリートリソース(ストリーミングインスタンス)
でIAMロールを使用出来るようになりました。
IAM ロールを使用すると、永続的な認証情報を配布せずに、一時的な認証情報でAWSリソースを操作出来ます。
この機能により、イメージ作成時にプライベートなS3バケットからアーカイブをダウンロードしたり、AWS CLI の実行環境を AppStream 2.0 で提供するといったことを、よりセキュアに行えるようになります。
IAM ロールの使用方法
IAM ロールの作成
appstream.amazonaws.com
が AssumeRole できる IAM ロールを作成します。
Trust relationships を次のように定義します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
Image Builderで使用
新規イメージローンチ時に、「Step 2: Configure Image Builder」の「IAM role(Advanced)」で作成した IAM ロールを設定します。
フリートで使用
フリート作成時に、「Step 3: Configure Fleet」の「IAM role(Advanced)」で作成した IAM ロールを設定します。
IAM ロールを使用した API の操作方法
IAM ロールを割り当てると、CLI/SDK の設定ファイルにプロフィール appstream_machine_role
が定義されます。
C:>type C:\Users\PhotonUser\.aws\config [profile appstream_machine_role] credential_process = "C:\Program Files\Amazon\Photon\PhotonRoleCredentialProvider\PhotonRoleCredentialProvider.exe" --role=Machine
credential_process を利用して、クレデンシャルを取得していますね。
API 実行時に、このプロフィールを指定すれば OK です。
AWS CLI から操作
C:\> aws s3 ls --profile appstream_machine_role
AWS Tools for PowerShell から操作
PS C:\> Get-EC2Instance -Region us-east-1 -ProfileName appstream_machine_role
Python SDK から操作
session = boto3.Session(profile_name='appstream_machine_role')
CloudTrail ログ
ストリーミングインスタンス内の AWS CLI から S3 の list-buckets API を実行したときの CloudTrail ログが以下です。
{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "XXX:PhotonSession", "arn": "arn:aws:sts::123456789012:assumed-role/AmazonAppStreamServiceAccess/PhotonSession", "accountId": "123456789012", "accessKeyId": "DUMMY", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2019-09-25T17:08:03Z" }, "sessionIssuer": { "type": "Role", "principalId": "XXX", "arn": "arn:aws:iam::123456789012:role/service-role/AmazonAppStreamServiceAccess", "accountId": "123456789012", "userName": "AmazonAppStreamServiceAccess" } }, "invokedBy": "AWS Internal" }, "eventTime": "2019-09-25T17:08:03Z", "eventSource": "s3.amazonaws.com", "eventName": "ListBuckets", "awsRegion": "eu-central-1", "sourceIPAddress": "172.18.165.74", "userAgent": "[aws-internal/3 aws-sdk-java/1.11.631 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.222-b10 java/1.8.0_222 vendor/Oracle_Corporation]", "requestParameters": { "host": [ "s3-eu-central-1.amazonaws.com" ] }, "responseElements": null, "additionalEventData": { "SignatureVersion": "SigV4", "CipherSuite": "ECDHE-RSA-AES128-SHA", "AuthenticationMethod": "AuthHeader", "vpcEndpointId": "vpce-1234" }, "requestID": "201681E4CE37A63C", "eventID": "f67ab1d4-4fdf-40ca-9584-ad60e6568d17", "eventType": "AwsApiCall", "recipientAccountId": "123456789012", "vpcEndpointId": "vpce-1234" }
参考
- (2019/09/09発表)Amazon AppStream 2.0 において Image Builder とフリートに対する AWS Identity and Access Management ロールのサポートが有効に
- Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances - Amazon AppStream 2.0
- AWS Developer Forums: Associate Role with Appstream EC2?